package main.old.new_2023.last.month_6;

/**
 * @Description: todo 1375. 二进制字符串前缀一致的次数
     * 给你一个长度为 n 、下标从 1 开始的二进制字符串，所有位最开始都是 0 。我们会按步翻转该二进制字符串的所有位（即，将 0 变为 1）。
     * 给你一个下标从 1 开始的整数数组 flips ，其中 flips[i] 表示对应下标 i 的位将会在第 i 步翻转。
     * 二进制字符串 前缀一致 需满足：在第 i 步之后，在 闭 区间 [1, i] 内的所有位都是 1 ，而其他位都是 0 。
     * 返回二进制字符串在翻转过程中 前缀一致 的次数。
 * todo 剑指 Offer 29. 顺时针打印矩阵
     * 输入一个矩阵，按照从外向里以顺时针的顺序依次打印出每一个数字。
 * @Author: Take-off
 * @Date: 1:00 PM 2023/6/5
 * @Param:
 * @return:
 **/
public class Solution0613 {

    //顺时针打印矩阵
    public int[] spiralOrder(int[][] matrix) {
        //判空
        if(matrix.length == 0)
            return new int[0];
        //初始化边界值 和 结果数组的当前指针
        int left=0, right=matrix[0].length-1, top=0, bottom=matrix.length-1;
        int cur = 0;
        //初始化结果数组
        int[] res = new int[(right+1) * (bottom+1)];
        //死循环：走一条边；更新边界值；判断边界值交错则跳出；
        while(true){
            //左到右
            for (int i = left;i<= right ;i++){
                res[cur++] =matrix[top][i];
            }
            if (++top > bottom){
                break;
            }
            //上到下
            for (int i = top;i<= bottom ;i++){
                res[cur++] =matrix[i][right];
            }
            if (--right < left){
                break;
            }
            //右到左
            for (int i = right;i >= left ;i--){
                res[cur++] =matrix[bottom][i];
            }
            if (--bottom < top){
                break;
            }
            //下到上
            for (int i = bottom;i >= top ;i--){
                res[cur++] =matrix[i][left];
            }
            if (++left > right){
                break;
            }
        }
        //返回结果数组
        return res;
    }

    //二进制字符串前缀一致的次数
    public int numTimesAllBlue(int[] flips) {
        //sum(i) = 1+2+...+i,前缀一致
        int sum = 0;
        int value = 0;
        int count = 0;
        for (int i = 1; i <= flips.length;i++){
            sum += i;
            value += flips[i-1];
            if (sum == value){
                count++;
            }
        }
        return count;
    }

    public static void main(String[] args) {

    }
}
